object ScalaVarDemo02 {

  def main(args: Array[String]): Unit = {



    // 类型推导，这个时候age是Int类型

    var age = 18



    /**

     * 有两种方式我们可以age是Int类型的：

     *  1. idea提示

     *  2. println(age.isInstanceOf[Int]) 结果为true

     */



    // 类型确定后，就不能修改，说明Scala是强数据类型语言

    // age = 2.1 编译器报错



    // age可以修改，因为age是var声明的

    age = 19

    val sal = 200

    // sal是val声明的，所以不可变

    // sal = 10000 编译器报错



    /**

     * Scala设计者为什么设计 var 和 val 呢？

     * 1、在实际编程，我们更多的需求是获取/创建一个对象后，读取该对象的属性，或者是修改对象的属性值，但是我们很少去改变这个对象本身。

     *   var dog = new Dog()

     *   dog.age = 99

     *   dog = new Dog()

     *  这时我们就可以使用val定义dog

     *   val dog = new Dog()

     *   dog.age = 99

     * 2、因为val 没有线程安全问题，因此效率高，scala的设计者推荐我们val

     * 3、如果对象需要改变，则使用var

     */

    val dog = new Dog()

    // 0

    println(dog.age)



    println(dog.name)



    // 这里我们就不能有下面的操作了

    // dog = new Dog()



  }

}



/**

 * 声明一个Dog类

 */

class Dog {

  // 声明一个age属性,给了一个默认值 _

  var age: Int = _

  var name: String = "小花"

}